0x00 前言
这篇教程是基于ONOS Wiki上教程写的,Wiki上写的还是比较清楚的,但在实践过程中还是踩了一些坑,为了总结写下了这篇教程。
本教程的环境搭建是在分配有4核CPU、8G内存、运行ubuntu 18.04 desktop虚拟机上完成的。
建议搭建环境的主机至少分配4G内存,如果你使用其他版本的ubuntu,本教程也是适用的。
0x01 目录
0x02 前期准备
- Git
- JDK
- Bazel
Git安装
sudo apt-get install git
JDK安装
ONOS-2.2以后的版本都使用JDK11,这里选择OpenJDK-11进行安装
# 安装OpenJDK-11
sudo apt-get install openjdk-11-jdk
# 配置环境变量
sudo gedit /etc/profile
# 在profile文件末尾添加下面的内容
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
# 查看配置是否成功,若显示openjdk version,则配置成功
java -version
参考:https://blog.csdn.net/EahanZhang/article/details/88085561
Bazel安装
Bazel是Google开发的用于编译的工具,在Github上选择bazel-0.27.1-installer-linux-x86_64.sh 进行下载
https://github.com/bazelbuild/bazel/releases/tag/0.27.1
注:
在我搭建环境的时候,参考的是ONOS Wiki于2019/6/19发布的教程,里面使用的是Bazel 0.27.0。
https://wiki.onosproject.org/pages/viewpage.action?pageId=28836246我开始时使用了1.0.0但发现编译失败,于是换成0.27.1,经过测试该版本有效。
1.0.0编译失败的问题已于2019/10/16被ONOS官方解决,因此你也可以选择安装最新版本的Bazel。
https://github.com/opennetworkinglab/onos/commit/2bf24538098ce3d963d7cbe7da4dfbcfc69285e5
根据Bazel官网安装教程进行安装
https://docs.bazel.build/versions/master/install-ubuntu.html#install-with-installer-ubuntu
0x03 ONOS安装
下载ONOS源码
有以下两种方式,选择一种即可
- Git命令下载
git clone https://gerrit.onosproject.org/onos
- Github上下载
https://github.com/opennetworkinglab/onos
ONOS源码目录改名
若选择从Github上下载ZIP压缩包,解压缩后得到onos-master目录,将其改名为onos,方便后续操作
mv onos-master onos
ONOS源码编译
cd onos
bazel build onos
当显示build success,说明编译成功
注:由于网络原因,可能某些依赖下载不下来,导致编译失败,此时可以选择重新运行
bazel build onos,直到依赖下载成功
运行ONOS控制器
cd onos
bazel run onos-local
参考
https://wiki.onosproject.org/display/ONOS/Development+Environment+Setup
0x04 Mininet安装
源码下载
git clone git://github.com/mininet/mininet
安装
cd mininet/util/
sudo ./install.sh
测试
sudo mn --test pingall
参考
0x05 测试环境
这里ONOS和Mininet都部署在同一台主机中进行测试,当然你也可以选择分别部署在不同主机上。
运行ONOS
cd onos
bazel run onos-local
# 若想要删除ONOS上一次运行时产生的状态信息,则输入:
# bazel run onos-local -- clean
注:
1.运行ONOS之前,ONOS需要监听的端口号6653和6633有可能被其他进程占用,因此可以先检查一下端口使用情况:
sudo netstat -atnp | grep 6653
sudo netstat -atnp | grep 6633
若除java进程外,有其他进程占用端口号6653或6633,例如:ovs-testcontrol,则杀死进程:
sudo kill -9 <进程号>
2.ONOS启动后,最好等待窗口中不再弹出INFO信息后,再运行Mininet
运行ONOS Apps
ONOS开启后,默认不运行Reactive Forwarding和Basic Pipelines应用程序,这样的话ONOS就无法处理2层和3层的转发,Mininet中主机之间无法ping通。因此在运行Mininet前,先运行这两个应用程序。下面介绍两种方法,选择其中一种即可
ONOS Web GUI
浏览器中打开ONOS Web GUI http://localhost:8181/onos/ui/
输入用户名:onos 密码:rocks
打开应用程序选项卡
运行Basic Pipelines和Reactive Forwarding应用程序
ONOS CLI
新开终端,输入
onos/tools/test/bin/onos localhost
打开ONOS命令行界面
输入命令运行Basic Pipelines和Reactive Forwarding应用程序
app activate org.onosproject.pipelines.basic app activate org.onosproject.fwd
注:
Basic Pipelines对应的应用程序ID为org.onosproject.pipelines.basic
Reactive Forwarding对应的ID为org.onosproject.fwd
运行Mininet
新开终端,运行命令创建如下拓扑:
h1 - sw1 - h2
sudo mn --controller=remote,ip=127.0.0.1 --mac --switch=ovsk,protocols=OpenFlow13
# 如果ONOS和Mininet分别部署在不同主机上,则上面的IP地址改为ONOS所在主机的IP地址
检查ONOS与Mininet连通性
下面介绍两种判断ONOS与Mininet是否连通的方法
若拓扑中显示设备,说明ONOS和Mininet中的交换机成功连接
若ONOS与Mininet连通,运行ONOS的终端会显示下面的INFO信息
测试主机之间的连通性
在运行Mininet的终端上,输入
pingall
参考
https://wiki.onosproject.org/display/ONOS/Basic+ONOS+Tutorial#BasicONOSTutorial-Setupyourenvironment
0x06 在IntelliJ IDEA中运行ONOS
下载IntelliJ IDEA
https://www.jetbrains.com/idea/download/#section=linux
运行IntelliJ IDEA
解压缩IDEA后,cd到IDEA的bin目录,运行IDEA
./idea.sh
安装Bazel插件
然后搜索Bazel并安装
导入ONOS源码并编译
生成最小的.bazelproject文件
cd onos/tools/dev/bin/
./onos-gen-bazel-project > /tmp/onos_bazelproject
等待IDEA完成ONOS源码的编译
运行ONOS
参考
https://wiki.onosproject.org/pages/viewpage.action?pageId=28836246
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!